import { getUserInfoValid } from '@/api/index';
import DZUtils from '@/utils/DZUtils';

export default {
  data() {
    return {
      baseUserInfo: {}
    };
  },
  methods: {
    async preCheck(type) {
      const res = await getUserInfoValid();
      if (res.returnCode === '0' && res.dataSet.length > 0) {
        this.baseUserInfo = { ...res.dataSet[0] };
      } else {
        DZUtils.iAlert('错误提示', res.returnInfo);
        return false;
      }
      // 应用职责链模式
      // 1风险测评
      if (type === '1') {
        this.setDutyChain(this.riskCheck, this.riskCallback);
      }
      // 2用户信息检查
      if (type === '2') {
        this.setDutyChain(this.completeCheck, this.completeCallback);
      }
      // 1风险测评、2用户信息检查
      if (type === '12') {
        this.setDutyChain(this.riskCheck, this.completeCheck, this.completeCallback);
      }
    },
    setDutyChain() {
      // 职责链模式
      const Chain = function (fn) {
        this.fn = fn;
        this.successor = null;
      };
      Chain.prototype.setSuccessor = function (successor) {
        return this.successor = successor;
      };
      Chain.prototype.passRequest = function () {
        return this.fn.apply(this, arguments);
      };
      Chain.prototype.next = function () {
        return this.successor && this.successor.passRequest.apply(this.successor, arguments);
      };
      // 按传参顺序，创建职责链，指定函数执行顺序
      const args = Array.prototype.slice.apply(arguments);
      const fn1 = new Chain(function () { args[0](this); });
      let afterfn; let
        fn;
      for (let i = 0, len = args.length; i < len; i++) {
        // (function (i) {
        if (args[i + 1]) {
          fn = i === 0 ? fn1 : afterfn;
          afterfn = new Chain(function () { args[i + 1](this); });
          fn.setSuccessor(afterfn);
        }
        // }(i));
      }
      // 开始执行函数
      fn1.passRequest();
    },
    riskCheck(self) {
      if (['3', '4'].includes(this.baseUserInfo.riskExpireStatus)) {
        // 3风险等级过期或原风险等级，4用户三要素为空
        DZUtils.iAlert('消息提示', `尊敬的${this.userInfo.userName}，您的风险测评已过期，请重新测评。`, '重新测评', this.goToWtRiskTest);
      } else if (this.baseUserInfo.riskExpireStatus === '2') {
        // 2风险等级即将过期，过期时间小于60天
        DZUtils.iConfirm('消息提示', `尊敬的${this.userInfo.userName}，您的风险测评即将过期，请重新测评！`, '重新测评', '稍后测评', this.goToWtRiskTest, () => {
          self.next();
        });
      } else {
        self.next();
      }
    },
    completeCheck(self) {
      let info1 = '';
      let info2 = '';
      let difInfo;
      let btnFunc;
      if (this.baseUserInfo.idExpire !== '0') {
        info2 = this.baseUserInfo.idExpireInfo;
        btnFunc = this.goToWtUpdateId;
        difInfo = '证件信息';
      }
      if (this.baseUserInfo.uncompleteFlag !== '0') {
        info1 = this.baseUserInfo.uncompleteInfo;
        btnFunc = this.goToWtUserInfo;
        difInfo = '账户信息';
      }
      if (this.userInfo.userType === '0' && (this.baseUserInfo.uncompleteFlag !== '0' || this.baseUserInfo.idExpire !== '0')) {
        // 个别信息不完整，港澳台信息证件不完整，须临柜办理
        if (this.baseUserInfo.uncompleteFlag === '2' || this.baseUserInfo.idExpire === '2') {
          DZUtils.iAlert('用户信息提示', `您的${difInfo}未补充完整，请前往就近营业网点更新资料后重新购买。<br/><small style="color:#999;">信息不完整：${info1}${info2}</small>`, () => {
            // 没有
            this.preCheckCancel && this.preCheckCancel();
          });
        } else {
        // 用户信息不完善或证件过期，网厅可修改，个人户
          DZUtils.iConfirm('用户信息提示', `请您提供完整的${difInfo}，以便向您销售风险承受能力相符的金融产品。</br><small style="color:#999;">信息不完整：${info1}${info2}</small>`, '完善客户信息', '以后再完善', btnFunc, () => {
            this.preCheckCancel && this.preCheckCancel();
          });
        }
      } else if (this.baseUserInfo.uncompleteFlag !== '0' || this.baseUserInfo.idExpire !== '0') {
        // 用户信息不完善或身份证过期，需临柜修改，机构户
        DZUtils.iAlert('用户信息提示', `您的${difInfo}未补充完整，请前往就近营业网点更新资料后重新购买。<br/><small style="color:#999;">信息不完整：${info1}${info2}</small>`, () => {
          this.preCheckCancel && this.preCheckCancel();
        });
      } else {
        // 用户信息完善,身份证信息完整
        self.next();
      }
    },
    riskCallback() {
      this.preCheckCallback('1');
    },
    completeCallback() {
      this.preCheckCallback('2');
    },
    goToWtUserInfo() {
    // 跳转到网厅用户信息修改页
      this.toWtUserInfo(this.preCheckParam);
    },
    goToWtUpdateId() {
    // 跳转到网厅用户信息修改页
      this.toWtUpdateId(this.preCheckParam);
    },
    goToWtRiskTest() {
    // 跳转到网厅风险测评页
      this.toWtRiskTest(this.preCheckParam);
    }
  }
};